package os

import (
	"fmt"
	"os"
	"time"
)

func Pid() {
	// 获取当前正在运行的进程id
	fmt.Printf("os.Getpid(): %v\n", os.Getpid())
	// 父进程id
	fmt.Printf("os.Getppid(): %v\n", os.Getppid())

	// 设置新进程的属性
	attr := &os.ProcAttr{
		// files指定新进程继承的活动文件对象
		Files: []*os.File{os.Stdin, os.Stdout, os.Stderr},
		// 新进程的环境变量
		Env: os.Environ(),
	}

	// 开始一个记事本进程
	p, err := os.StartProcess("C:\\Windows\\System32\\notepad.exe",
		[]string{"C:\\Windows\\System32\\notepad.exe", "D:\\a.txt"}, attr)
	if err != nil {
		fmt.Printf("err: %v\n", err)
	}
	fmt.Printf("p: %v\n", p)
	fmt.Printf("p.Pid: %v\n", p.Pid)

	p2, _ := os.FindProcess(p.Pid)
	fmt.Printf("p2: %v\n", p2)

	// 10s过后执行函数
	time.AfterFunc(time.Second*10, func() {
		// 向p进程发送退出信号
		p.Signal(os.Kill)
	})
	// 等待p退出  返回进程状态
	ps, _ := p.Wait()
	fmt.Printf("ps.String(): %v\n", ps.String())
}

func Env() {
	// 获取所有环境变量
	s := os.Environ()
	fmt.Printf("s: %v\n", s)
	// 获取某个环境变量
	s2 := os.Getenv("JAVA_HOME")
	fmt.Printf("s2: %v\n", s2)
	//设置环境变量
	os.Setenv("env1", "env1")
	s3 := os.Getenv("env1")
	fmt.Printf("s3: %v\n", s3)
	fmt.Println("--------------------------")

	// 查找
	s4, b := os.LookupEnv("env1")
	fmt.Printf("s4: %v\n", s4)
	fmt.Printf("b: %v\n", b)

	// 模板替换
	os.Setenv("NAME", "zhoujl")
	os.Setenv("LOCAL", "shanghai")
	fmt.Println(
		os.ExpandEnv(`$NAME 
	live in 
	$LOCAL`))
}
